package com.zhiyou100.util.fastdfs;

import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.io.FileUtil;

import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.lang.Console;
import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.RuntimeUtil;
import com.github.tobato.fastdfs.domain.fdfs.MetaData;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.fdfs.ThumbImageConfig;
import com.github.tobato.fastdfs.service.DefaultFastFileStorageClient;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;


import java.io.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 文件下载
 *
 * @author yang
 * @version 1.0.0
 * @date 2020-10-17 15:32
 */
@Slf4j
@Component
public class FastdfsUtil {
    @Autowired
    protected FastFileStorageClient storageClient;


    /**
     * 上传文件
     * @param file 要上传的文件
     * @return 返回的 文件第 id
     */
    public String upload(File file) {
        final FileReader fileReader = new FileReader(file);
        log.debug("文件上传");
        final StorePath storePath = storageClient.uploadFile(fileReader.getInputStream(), file.length(), FileNameUtil.getName(file), null);
        log.debug(" 文件位置 {}", storePath);
        return storePath.getFullPath();
    }

    /**
     * 下载
     *
     * @param id 文件 id
     * @return void
     */
    public void download(String id, OutputStream os) {
        final StorePath storePath = StorePath.parseFromUrl(id);
        log.debug("下载文件");
        final InputStream inputStream = storageClient.downloadFile(
                storePath.getGroup(),
                storePath.getPath(),
                in -> in
        );
        IoUtil.copy(inputStream, os, 3192);
        log.debug("下载完成！！！");
    }


}
